<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require_once(APPPATH."models/alunomodel.php");
require_once(APPPATH."models/turmamodel.php");
require_once(APPPATH."models/notamodel.php");
require_once(APPPATH."models/faltamodel.php");
require_once(APPPATH."models/materiamodel.php");
require_once(APPPATH."models/telefonemodel.php");
require_once(APPPATH."models/responsavelmodel.php");
class alunodao extends CI_Model {
	
	function __construct(){
		parent::__construct();
	}
	
	public function excluirResponsavelById($id){
		try{
			$exec = $this->db->query("call excluirResponsavelById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
					
				$dados = $exec->row();
				$erro = $dados->erro;
				$this->db->close();
				if($erro == 0){
					return 1; // deletado
				}
		
		
				return -1; // Erro
					
			}
		
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function excluirTelResponsavel($id){
		try{
			$exec = $this->db->query("call excluirTelResponsavel(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
					
				$dados = $exec->row();
				$erro = $dados->erro;
				$this->db->close();
				if($erro == 0){
					return 1; // deletado
				}
				
		
				return -1; // Erro
					
			}
		
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function inserirTelefoneResponsavel($id, $telefone){
		try{
			$exec = $this->db->query("call inserirEditarTelefone(0, ".$id.", '".$telefone."', 2)") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
					
				$dados = $exec->row();
				$tipo = $dados->tipo;
				$erro = $dados->erro;
				$this->db->close();
				if($tipo == "insert"){
					return $erro; // inserido com sucesso;
				}
				else {
					if($erro == 0){
						return 1; // editado com sucesso
					}
					else {
						return - 2; //Erro no update
					}
						
				}
		
				return -1; // Erro
					
			}
		
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function inserirEditarResponsavel($id, $idAluno, $nome, $email){
		try{
			$exec = $this->db->query("call inserirEditarResponsavel(".$id.", ".$idAluno.", '".$nome."', '".$email."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
					
				$dados = $exec->row();
				$tipo = $dados->tipo;
				$erro = $dados->erro;
				$this->db->close();
				if($tipo == "insert"){
					return $erro; // inserido com sucesso;
				}
				else {
					if($erro == 0){
						return 1; // editado com sucesso com senha
					}
					else {
						return - 2; //Erro no update
					}
					
				}
		
				return -1; // Erro
					
			}
				
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function getResponsavelByAluno($id){
		try{
			$exec = $this->db->query("call getResponsavelByIdAluno(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$qtd = $exec->num_rows();
				$listaResponsavel = array();
				$i = 0;
				$idAux = 0;
				$r = null;
				foreach($exec->result() as $dados){
					if($idAux != (int)$dados->idResponsavel && $i != 0){
						array_push($listaResponsavel, $r);
					}
					if($idAux != (int)$dados->idResponsavel){
						$r = new ResponsavelModel();
						$r->setIdAluno((int)$dados->idAluno);
						$r->setIdResponsavel((int)$dados->idResponsavel);
						if(isset($dados->email)){
							$r->setEmail($dados->email);
						}
						$r->setNome($dados->nome);
						$idAux = (int) $dados->idResponsavel;
					}
					if(isset($dados->idTelefone)){
						$t = new TelefoneModel();
						$t->setIdTelefone($dados->idTelefone);
						$t->setTelefone($dados->telefone);
						array_push($r->listaTelefone, $t);
					}
					if($qtd == $i + 1){
						array_push($listaResponsavel, $r);
					}
					$i++;
				}
				$this->db->close();
				return $listaResponsavel;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function getAlunosBusca($nome){
		try{
			$exec = $this->db->query("call getAlunosBusca('".$nome."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaAlunos = array();
				foreach($exec->result() as $dados){
					$a = new AlunoModel();
					$a->setIdAluno($dados->idAluno);
					$a->setMatricula($dados->matricula);
					$a->setNome($dados->nome);
					$a->setEmail($dados->email);
					array_push($listaAlunos, $a);
				}
				$this->db->close();
				return $listaAlunos;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function getMateriaNotaByAluno($id){
		try {
			$exec = $this->db->query("call getMateriasAlunoByIdAlunoAnoVigente(".$id.")") or die("Erro : " . $this->db->_error_message());
			
			if($exec->num_rows() > 0){
				$qtd = $exec->num_rows(); 
				$idMatAux = 0;
				$listaMateria = array();
				$m = null;
				$i = 0;
				foreach($exec->result() as $d){
					if($idMatAux != (int) $d->idMateria && $i != 0){
						array_push($listaMateria, $m);
					}
					if((int)$d->idMateria != $idMatAux){
						$m = new MateriaModel();
						$m->setIdMateria($d->idMateria);
						$m->setMateria($d->materia);
						$idMatAux = (int)$d->idMateria;
					}
					if(isset($d->nota)){
						$n = new NotaModel();
						$n->setBimestre($d->bimestre);
						$n->setNota($d->nota);
						$n->setTipoNota($d->tipoNota);
						array_push($m->nota, $n);
					}
					if($qtd == $i + 1){
						array_push($listaMateria, $m);
					}
					$i++;
				}
				$this->db->close();
				return $listaMateria;
				
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
		return null;
	}
	
	public function getFaltasAluno($idAluno, $idMateria){
		try{
			$exec = $this->db->query("call getFaltasByAluno(".$idAluno.", ".$idMateria.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaFalta = array();
				foreach($exec->result() as $d){
					$f = new FaltaModel();
					$f->setIdFalta($d->idFalta);
					$f->setBimestre($d->bimestre);
					$f->setIdMateria($d->idMateria);
					$f->setAno($d->ano);
					$f->setQuantidade($d->quantidade);
					array_push($listaFalta, $f);
				}
				$this->db->close();
				return $listaFalta;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function getAlunosNotaByTurma($idTurma, $idMateria){
		try {
			$exec = $this->db->query("call getAlunosNotaByTurma(".$idTurma.", ".$idMateria.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$qtd = $exec->num_rows();
				$listaAluno = array();
				$idAlunoAux = 0;
				$i = 0;
				$a = null;
				foreach($exec->result() as $d){
					
					if($i != 0 && $idAlunoAux != (int) $d->idAluno){
						array_push($listaAluno, $a);
					}
					
					if($idAlunoAux != (int) $d->idAluno){
						$a = new AlunoModel();
						$a->setNome($d->nome);
						$a->setIdAluno($d->idAluno);
						//$a->setIntOrdemChamada($d->intOrdemChamada);
						$idAlunoAux = (int) $d->idAluno;

					}
					//echo $d->idNota;
					if(isset($d->idNota)){
						
						$n = new NotaModel();
						$n->setAno($d->ano);
						$n->setBimestre($d->bimestre);
						$n->setIdMateria($d->idmateria);
						$n->setIdNota($d->idNota);
						$n->setIntOrdem($d->intOrdemNota);
						$n->setNota($d->nota);
						$n->setTipoNota($d->tipoNota);						
						array_push($a->nota, $n);
					}
					if($qtd == $i + 1){
						array_push($listaAluno, $a);
					}
					$i++;
				}
				$this->db->close();
				return $listaAluno;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function alterarOrdemAluno($idAluno, $idTurma, $ordem){
		try {
			$exec = $this->db->query("call alterarOrdemAlunoTurma(".$idAluno.", ".$idTurma.", ".$ordem.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$erro = (int)$dados->erro;
				$this->db->close();
				if($erro == 0){
					$erro = true;
				}
				else {
					$erro = false;
				}
				return $erro;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
			}
		}
	}
	
	public function getAlunosByTurma($id){
		try {
			$exec = $this->db->query("call getAlunosByTurma(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaAlunos = array();
				foreach($exec->result() as $dados){
					$a = new AlunoModel();
					$a->setIdAluno($dados->idAluno);
					$a->setIntOrdemChamada($dados->intOrdemChamada);
					$a->setNome($dados->nome);
					array_push($listaAlunos, $a);
				}
				$this->db->close();
				return $listaAlunos;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
				
			}
		}
		return null;
	}
	
	public function getAlunoTurma($id){
		try {
			$exec = $this->db->query("call getAlunoTurmaByAluno(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$ret = array();
				$a = new AlunoModel();
				$a->setIdAluno($dados->idAluno);
				$a->setMatricula($dados->matricula);
				$a->setNome($dados->nome);
				$a->setIntOrdemChamada($dados->intOrdemChamada);
				$ret['aluno'] = $a;
				if(!is_null($dados->idturma)){
					$turma = new TurmaModel();
					$turma->setIdTurma($dados->idturma);
					$turma->setAno($dados->ano);
					$turma->setNome($dados->nomeTurma);
					$turma->serie->setIdEnsino($dados->idEnsino);
					$turma->serie->setIdSerie($dados->idserie);
					$turma->serie->setSerie($dados->serie);
					$turma->serie->setStrSerie($dados->strSerie);
					$ret['turma'] = $turma;
				}				
				$this->db->close();
				return $ret;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function getAlunoById($id){
		try {
			$exec = $this->db->query("call getAlunoById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$a = new AlunoModel();
				$a->setIdAluno($dados->idAluno);
				$a->setMatricula($dados->matricula);
				$a->setNome($dados->nome);
				$a->setEmail($dados->email);
				$a->setDataNascimento($dados->data);
				$this->db->close();
				return $a;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try {
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	
	public function inserirEditar($id, $matricula, $nome, $email, $senha, $data){
		try{
			$exec = $this->db->query("call inserirEditarAluno(".$id.", '".$matricula."', '".$nome."', '".$senha."', '".$email."', '".$data."')") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
			
				$dados = $exec->row();
				$tipo = $dados->tipo;
				$erro = $dados->erro;
				$this->db->close();
				if($tipo == "insert"){
					return 0; // inserido com sucesso;
				}
				else {
					if($erro == 0){
						return 1; // editado com sucesso com senha
					}
					elseif($erro == -2){
						return 2; // Editado sem senha
					}
					elseif($erro == -1){
						return 3; // Não encontrado para alterar
					}
				}
				
				return -1; // Erro
			
			}
			
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $a){
			}
		}
		return null;
	}
	
	public function getAlunoEntreAno($de, $ate){
		try{
			$exec = $this->db->query("call getAlunosEntreAno(".$de.", ".$ate.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaAlunos = array();
				foreach($exec->result() as $dados){
					$a = new AlunoModel();
					$a->setIdAluno($dados->idAluno);
					$a->setMatricula($dados->matricula);
					$a->setNome($dados->nome);
					$a->setEmail($dados->email);
					array_push($listaAlunos, $a);
				}
				$this->db->close();
				return $listaAlunos;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	public function getListaAlunos(){
		try{
			$exec = $this->db->query("call getListaAluno()") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$listaAlunos = array();
				foreach($exec->result() as $dados){
					$a = new AlunoModel();
					$a->setIdAluno($dados->idAluno);
					$a->setMatricula($dados->matricula);
					$a->setNome($dados->nome);
					$a->setEmail($dados->email);
					array_push($listaAlunos, $a);
				}
				$this->db->close();
				return $listaAlunos;
			}
			$this->db->close();
			return null;
		} catch(Exception $e){
			try{
				$this->db->close();
			} catch(Exception $e){
			}
		}
		return null;
	}
	
	/**
	 * retorna 0 = desativou aluno, diferente disso não
	 * @param unknown_type $id
	 * @return unknown|NULL
	 */
	public function excluir($id){
		try {
			$exec = $this->db->query("call exlcuirAlunoById(".$id.")") or die("Erro : " . $this->db->_error_message());
			if($exec->num_rows() > 0){
				$dados = $exec->row();
				$erro = $dados->erro;
				$this->db->close();
				return $erro;
			}
			$this->db->close();
			return null;
		} catch (Exception $e) {
			try {
				$this->db->close();
			} catch (Exception $a) {
	
			}
		}
	}
}
